package org.example.transaction;

import com.sun.org.apache.xpath.internal.res.XPATHErrorResources_it;
import org.apache.rocketmq.client.producer.LocalTransactionState;
import org.apache.rocketmq.client.producer.TransactionListener;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;

import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;

public class TransactionListenerImpl implements TransactionListener {

    private AtomicInteger transactionIndex = new AtomicInteger(0);
    private ConcurrentHashMap<String, Integer> localTrans = new ConcurrentHashMap<>();

    @Override
    public LocalTransactionState executeLocalTransaction(Message msg, Object arg) {
        System.out.println("execute： "+msg.getKeys());
        if (msg.getKeys().equals("KEY1")) {
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
//        int status = value % 3;
//        localTrans.put(msg.getTransactionId(), status);
//        System.out.println(localTrans.get(msg.getTransactionId()));
        return LocalTransactionState.UNKNOW;
    }

    @Override
    public LocalTransactionState checkLocalTransaction(MessageExt msg) {
        System.out.println("check： "+msg.getKeys());
        if (msg.getKeys().equals("KEY1")) {
            return LocalTransactionState.UNKNOW;
        }else {
            return LocalTransactionState.COMMIT_MESSAGE;
        }
//        Integer status = localTrans.get(msg.getTransactionId());
//        if (null != status) {
//            switch (status) {
//                case 0:
//                    System.out.println(0);
//                    return LocalTransactionState.UNKNOW;
//                case 1:
//                    return LocalTransactionState.COMMIT_MESSAGE;
//                case 2:
//                    return LocalTransactionState.ROLLBACK_MESSAGE;
//            }
//        }

        //return LocalTransactionState.COMMIT_MESSAGE;
    }
}
